package org.blim.blackdawn.shader;

import org.blim.blackdawn.model.Model;

/**
 * A Shader represents a GLSL shader program.
 * 
 * <p>A Shader knows how to render an object of a specific type, given the data
 * for that object, the list of lights which are relevant and the corresponding
 * view and projection matrices.</p>
 * 
 * @author lee@longlost.info
 *
 * @param <T> The type that this shader can draw.
 */
public interface Shader<T extends Model> {

	public void draw(T model,
			float[] modelMatrix,
			float[] view,
			float[] projection,
			float[] lightPositions,
			float[] lightColors,
			int lightCount);
	
}
